#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <signal.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

#include "dama_data.h"
#include "server_network.h"

#define SERVER_PORT 1234

// Creo il socket
int create_socket()
{
	int sock;
	struct sockaddr_in server;
	
	if((sock = socket(AF_INET,SOCK_STREAM,0))==-1){
		perror(strerror(errno));
		exit(1);
	}
	server.sin_family=AF_INET;
  	server.sin_addr.s_addr=htonl(INADDR_ANY);
  	server.sin_port=htons(SERVER_PORT);
  	
  	if(bind(sock,(struct sockaddr *) &server,sizeof(server))==-1){
  		perror(strerror(errno));
  		exit(2);
  	}
  	printf("Socket created\n");
  	
  	return sock;
}

/* Invio al client un messaggio di controllo
 * code:
 * 0 ok
 * 1 mossa non valida
 * 2 obbligatorio mangiare
 * 3 mossa bianco
 * 4 mossa nero
 * 5 vittoria bianco
 * 6 vittoria nero
 */
void sendControlMessage(int sock, int code)
{
	printf("Invio il codice %d a %i\n", code, sock);
	if(send(sock, &code, 4, 0) == -1)
	{
		printf("I've got a problem sending a control message to client\n");
	}
}

// Invio al client la prossima mossa
void sendNextMove(int sock, move_message_t *message)
{
	if(send(sock, message, sizeof(move_message_t), 0) == -1)
	{
		printf("I've got a problem sending a move message to client\n");
	}
}

// Ricevo dal client la proposta per la prossima mossa
void recvMoveProposal(int sock, move_message_t *proposal)
{
	printf("Ricevo la proposal...\n");
	sleep(5);
	recv(sock, proposal, sizeof(move_message_t), 0);
}
